#include "key.h"

#define KEY1  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KEY2  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)
#define KEY3  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)
#define KEY4  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)

uint8_t keySta[4] = {1,1,1,1};
uint8_t keyMap[4] = {0x11,0x12,0x13,0x14};

void key_gpio_config(void)
{
	GPIO_InitTypeDef gpio_structure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	gpio_structure.GPIO_Mode = GPIO_Mode_IPU;
	gpio_structure.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_structure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;
	GPIO_Init(GPIOA, &gpio_structure);
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	gpio_structure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
	GPIO_Init(GPIOB, &gpio_structure);
}

void key_scan(void)
{
	uint8_t i;
	static uint8_t buff[4] = {0xff, 0xff,0xff,0xff};
	
	buff[0] = (buff[0] << 1) | KEY1;
	buff[1] = (buff[1] << 1) | KEY2;
	buff[2] = (buff[2] << 1) | KEY3;
	buff[3] = (buff[3] << 1) | KEY4;
	
	for(i = 0; i < 4; i ++)
	{
		if(buff[i] == 0xff)
		{
			keySta[i] = 1;
		}
		else if(buff[i] == 0x00)
		{
			keySta[i] = 0;
		}
		else
		{}
	}
}


uint8_t key_drive(void)
{
	uint8_t i, res = 0;
	static uint8_t backup[4] = {1,1,1,1};
	for(i = 0; i < 4; i ++)
	{
		if(backup[i] != keySta[i])
		{
			if(backup[i] != 0)
			{
				res = keyMap[i];
			}
		}
		backup[i] = keySta[i];
	}
	return res;
}
